# -*- coding: utf-8 -*-
# @Time    : 2024/7/19 14:53
# @Author  : yujiahao
# @File    : 47_fastapi_staticfiles.py
# @description: 静态文件


"""
挂载静态资源的好处：

    1. 提高性能
    - 减少服务器负担：静态文件可以由服务器直接提供，而不需要经过应用程序逻辑处理，这减少了服务器的负担。
    - 缓存：静态文件可以被客户端浏览器缓存，从而减少重复请求，提高加载速度。

    2. 简化开发
    - 组织和管理：将静态资源文件与应用程序逻辑分开，可以更好地组织和管理代码。
    - 前端开发：前端开发人员可以独立于后端开发，直接在静态文件中进行修改和测试。

    3. 提供完整的用户体验
    - 丰富的界面：通过使用 CSS 和 JavaScript，可以创建更丰富和互动的用户界面。
    - 多媒体支持：可以轻松地提供图像、视频和其他多媒体内容，增强用户体验。

    4. 安全性
    - 隔离静态内容：将静态内容与动态内容隔离，可以减少潜在的安全风险。例如，防止动态内容中的安全漏洞影响静态资源的提供。

    5. 灵活性和扩展性
    - 集成第三方库：可以轻松地集成和使用各种第三方前端库和框架，如 Bootstrap、jQuery 等。
    - 模块化：通过模块化的方式组织静态资源，可以更容易地进行维护和扩展。

    6. SEO 友好
    - 优化加载时间：快速加载的静态资源可以提高页面的加载速度，这对搜索引擎优化（SEO）非常重要。
    - 结构化内容：通过使用 CSS 和 JavaScript，可以更好地组织和展示内容，提高搜索引擎的抓取和索引效果。

    7. 简单配置和使用
    - 便捷的挂载：FastAPI 提供了简单的方式来挂载静态文件目录，使得配置和使用非常方便。
    - 集成模板引擎：结合模板引擎（如 Jinja2），可以动态生成 HTML 页面，并使用静态资源文件。
"""

from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.responses import HTMLResponse

# 创建 FastAPI 应用实例
app = FastAPI()

# 挂载静态文件目录
# 将 "static" 目录挂载到 "/files" 路径
# 这样可以通过 "/files" 路径访问该目录下的所有静态文件

# directory="static" 指向包含你的静态文件的目录名字。
# name="files" 提供了一个能被FastAPI内部使用的名字。
app.mount("/files", StaticFiles(directory="static"), name="files")


# 定义根路径 ("/") 的路由处理函数
@app.get("/", response_class=HTMLResponse)
async def read_root():
    # HTML 内容，包含对静态文件的引用
    html_content = """
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>FastAPI Static Files</title>
        <!-- 引用 CSS 文件 -->
        <link rel="stylesheet" href="/files/css/styles.css">
    </head>
    <body>
        <h1>Hello, FastAPI!</h1>
        <!-- 引用图像文件 -->
        <img src="/files/images/logo.png" alt="Logo">
        <!-- 引用 JavaScript 文件 -->
        <script src="/files/js/scripts.js"></script>
    </body>
    </html>
    """
    # 返回 HTML 响应
    return html_content
